#ifndef _SCHEDULER_H_
#define _SCHEDULER_H_

#include "../include/process.h"
#include "../include/defs.h"

#define MAX_CANT_PROC 64

#define MAX_STAT_TICS 18

//maxima prioridad asignable
#define CANT_PRIO 4

int createProcess(char * name, processFunc process, char isBackground,
	int argc, char ** argv, unsigned char priority, char tty, int stackLen);
int killProc(int pid);
void * schedule(int yieldCall);
void initScheduler(void);
void initProcesses(void);

process_t * getProcByPid(int pid);

//salva el stack del proceso actual y devuelve el stack para hacer scheduling
void * switchToSchedulingContext(void * esp);

//funcion con la cual terminan los procesos
void cleanProcess(void);

//cambia el estado del proceso a bloqueado, se bloquea en el estado
// de blockState
void blockProcess(int proc, int blockState);

//busca procesos de la terminal tty que esten bloqueados y esten en el
//foreground y los desbloquea
void unblockProcesses(int tty);

//despierta un proceso
void wakeProcess(process_t * proc, int srcPid);

//copia los maxProcs procesos al puntero que se le pasa. Si maxProcs es -1 se copian todos
int schedulerGetProcs(process_info_t *processes, int maxProcs);

//devuelve el indice de su padre
int getIndexParent(int index);

//implementacion de la funcion de espera a un pid en particular
int waitImpl(int waitPid);

#endif
